<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MovimientosCaja_model extends CI_Model {
    
    
    function tipo_movimiento($tipo_desc){
        $query_tipo="SELECT * 
                    FROM TiposMovimientosCaja 
                    WHERE TipMov_Descripcion ='$tipo_desc'";
        $tipo_mov= $this->db->query($query_tipo);
        return $tipo_mov->result();
    }
    function centro_costo_todas_sec(){
        $query_centro_costo="SELECT * FROM Secretarias";
        $centro_costo=  $this->db->query($query_centro_costo);
        return $centro_costo->result();
    }
    
    
    function centro_costo_sec($sec_desc){
        $query_centro_costo="SELECT DISTINCT CentrosDeCostos.Sec_Id,
                                            CentrosDeCostos.Dir_Id,
                                            CentrosDeCostos.Gru_Id,
                                            CentrosDeCostos.Cur_Id,
                                            CentrosDeCostos.Dic_Id
                                                    FROM CentrosDeCostos
                                        INNER JOIN Secretarias
                                        ON (CentrosDeCostos.Sec_Id=Secretarias.Sec_Id)
                                        WHERE Secretarias.Sec_Descripcion= ? ";
        $centro_costo=  $this->db->query($query_centro_costo,array($sec_desc));
        return $centro_costo->result();
    }
    
    function centro_costo_grupo($gru_desc){
        $query_centro_costo="SELECT DISTINCT CentrosDeCostos.Sec_Id,
                                            CentrosDeCostos.Dir_Id,
                                            CentrosDeCostos.Gru_Id,
                                            CentrosDeCostos.Cur_Id,
                                            CentrosDeCostos.Dic_Id
                            FROM CentrosDeCostos
                            INNER JOIN Grupos
                                ON (CentrosDeCostos.Sec_Id=Grupos.Sec_Id
                                AND CentrosDeCostos.Dir_Id=Grupos.Dir_Id
                                AND CentrosDeCostos.Gru_Id=Grupos.Gru_Id)
                            WHERE Grupos.Gru_Descripcion='$gru_desc'";
        $centro_costo=  $this->db->query($query_centro_costo);
        return $centro_costo->result();
    }
    
    function centro_costo_dir($dir_desc){
        $query_centro_costo="SELECT * FROM Direcciones WHERE Dir_Descripcion='$dir_desc'";
        $centro_costo=  $this->db->query($query_centro_costo);
        return $centro_costo->result();
    }
    
    function get_id($caj_id,$fecha){
        $query="SELECT * FROM MovimientosCaja 
                WHERE Caj_Id='$caj_id' AND Mov_FechaHora='$fecha'";
        $equery=  $this->db->query($query);
        return $equery->result();
    }
    
    
    
    function get_id_comprobante($caj_id,$mov_caj){
        $query="SELECT Comp_Nro FROM Comprobantes 
                WHERE MovimientoCaja_Caj_Id='$caj_id' AND MovimientoCaja_Mov_Id='$mov_caj';";
        $equery=  $this->db->query($query);
        return $equery->result();
    }
    
    public function insert($caj_id,$tipo_mov,$monto,$desc,$fecha,$fPago,$ie,$sec,$dir,$gru,$curso,$dictado,$razonsocial){
        
        $arr=explode("-",$fecha);
        $d=$arr[0];
        $m=$arr[1];
        $a=$arr[2];
        $fecha="$a-$m-$d";
        if($fPago=='Contado'){
            $formaPago=1;
        }else{
            $formaPago=2;
        }
        $query_mov_caja="INSERT INTO MovimientosCaja(
                                        Caj_Id,
                                        TipMov_Id,
                                        Mov_Mono,
                                        Mov_Descripcion,
                                        Mov_FechaHora,
                                        Mov_FormaDePago,
                                        Mov_IngresoEgreso,
                                        Mov_Anulado,
                                        Sec_Id,Dir_Id,Gru_Id,Cur_Id,Dic_Id,
                                        Mov_RazonSocial)
                        VALUES('$caj_id','$tipo_mov','$monto','$desc','$fecha','$formaPago','$ie','FALSE','$sec','$dir','$gru','$curso','$dictado','$razonsocial');
                        ";
        
        $this->db->query($query_mov_caja);
        //$res=$result->row();
        $q="SELECT MAX(Mov_Id) AS ID FROM MovimientosCaja WHERE Caj_Id=?";
        $result=$this->db->query($q,array($caj_id));    
        $res=$result->result();
        
       foreach ($res as $re){
            $id=$re->ID;
            
        }
        return $id;
    }
    
    
     
    function insert_comprobante($comp_tipo,$com_nro,$caj_id,$mov_caj){
        //Tipo Comprobante 1 = RECIBO
        //Tipo Comprobante 2 = FACTURA
        //Tipo Comprobante 3 = VALE
        //Tipo Comprobante 4 = OTRO
        if($comp_tipo=='RECIBO'){
            $comp_tipo=1;
        }elseif($comp_tipo=='FACTURA'){
            $comp_tipo=2;
        }elseif($comp_tipo=='VALE'){
            $comp_tipo=3;
        }else{
            $comp_tipo=4;
        }
        $q_comp="INSERT INTO Comprobantes(
                                        Tipo_Comprobante,
                                        Comp_Nro_Externo,                                            
                                        MovimientoCaja_Caj_Id,
                                        MovimientoCaja_Mov_Id)
                                        VALUES('$comp_tipo','$com_nro','$caj_id','$mov_caj')";
        $comp= $this->db->query($q_comp);
         
    }
    function insert_comprobanteEgreso($comp_tipo,$com_nro,$caj_id,$mov_caj){
        //Tipo Comprobante 1 = RECIBO INGRESO
        //Tipo Comprobante 2 = FACTURA
        //Tipo Comprobante 3 = VALE
        //Tipo Comprobante 4 = RECIBO EGRESO
        //Tipo Comprobante 5 = RECIBO COOPERADORA, en caso de que proveedor no cuenta con comprobante para entregar.
        if($comp_tipo=='Recibo'){
            $comp_tipo=4;
        }elseif($comp_tipo=='Factura'){
            $comp_tipo=2;
        }elseif($comp_tipo=='VALE'){
            $comp_tipo=3;
        }else{
            $comp_tipo=5;
        }
        $q_comp="INSERT INTO Comprobantes(
                                        Tipo_Comprobante,
                                        Comp_Nro_Externo,                                            
                                        MovimientoCaja_Caj_Id,
                                        MovimientoCaja_Mov_Id)
                                        VALUES('$comp_tipo','$com_nro','$caj_id','$mov_caj')";
        $comp= $this->db->query($q_comp);
         
    }
    function insert_vale($caj_id,$mov_caj){
        //Tipo Comprobante 1 = RECIBO
        //Tipo Comprobante 2 = FACTURA
        //Tipo Comprobante 3 = VALE
        //Tipo Comprobante 4 = OTRO
        $comp_tipo=3;
        
        $q_comp="INSERT INTO Comprobantes(
                                        Tipo_Comprobante,
                                        MovimientoCaja_Caj_Id,
                                        MovimientoCaja_Mov_Id)
                                        VALUES('$comp_tipo','$caj_id','$mov_caj')";
        $comp= $this->db->query($q_comp);
         
    }
    
    function nro_vale($nro_comp){
        
        $q_comp="UPDATE Comprobantes
                    SET Comp_Nro_Externo = Comp_Nro
                    WHERE Comp_Nro=?";
        $comp= $this->db->query($q_comp,array($nro_comp));
        return $comp;
         
    }
    
    function get_mov($caj_id,$mov_caj){
        $query="SELECT * FROM MovimientosCaja 
                WHERE Caj_Id='$caj_id' AND Mov_Id='$mov_caj';";
        $equery=  $this->db->query($query);
        return $equery->result();
    }
    
    function get_mov_cli($caj_id,$mov_caj){
        $query="SELECT * FROM MovimientosCaja 
                WHERE Caj_Id='$caj_id' AND Mov_Id='$mov_caj';";
        $equery=  $this->db->query($query);
        return $equery->result();
    }
   
    function insertIngreso_movCli($caj_id,$mov_id,$cli_id,$razonsocial){
        $query="INSERT INTO MovimientosCli
                            (Caj_Id,Mov_Id,Cli_Id,Prov_Id,RazonSocial)
                        VALUES
                            (?,?,?,NULL,?)";
        $equery=  $this->db->query($query,array($caj_id,$mov_id,$cli_id,$razonsocial));
        return $equery;
    }
    
    function insertEgreso_movCli($caj_id,$mov_id,$prov_id,$razonsocial){
        $query="INSERT INTO MovimientosCli
                            (Caj_Id,Mov_Id,Cli_Id,Prov_Id,RazonSocial)
                        VALUES
                            (?,?,NULL,?,?)";
        $equery=  $this->db->query($query,array($caj_id,$mov_id,$prov_id,$razonsocial));
        return $equery;
    }
    
    function get_caja($caj_id){
        $query="SELECT * FROM Cajas INNER JOIN Usuarios
                ON Cajas.Usr_Login=Usuarios.Usr_Login
                WHERE Caj_Id= ? ";
        $equery=  $this->db->query($query,array($caj_id));
        return $equery->result();
    }
    function nombre_puesto($puesto_id){
            $query='SELECT Pue_Ubicacion FROM PuestosCaja WHERE Pue_Id= ?';
            $result=$this->db->query($query,array($puesto_id));
            
            return $result->result();
        }
    
    function recibo_nro($pue_ubicacion){
        if(substr($pue_ubicacion,0,7)=='Central'){
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0001-%')and
                    (PuestosCaja.Pue_Ubicacion LIKE 'Central' + '%')AND
                    (Comprobantes.Tipo_Comprobante=1)";
        }elseif (substr($pue_ubicacion,0,5)=='Anexo') {
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0002-%')and
                    (PuestosCaja.Pue_Ubicacion LIKE 'Anexo' + '%')AND
                    (Comprobantes.Tipo_Comprobante=1)";
        }else{
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0003-%')and
                    (Comprobantes.Tipo_Comprobante=1)";
        }
            $result=$this->db->query($query);
            $res=$result->result();
            foreach ($res as $re){
                if(!$re->Rbo_Nro and substr($pue_ubicacion,0,7)=='Central'){
                    $rbo="0001-00000001";
                }elseif(!$re->Rbo_Nro and substr($pue_ubicacion,0,5)=='Anexo'){
                    $rbo="0002-00000001";
                }elseif(!$re->Rbo_Nro){
                    $rbo="0003-00000001";
                }elseif($re){
                $r=$re->Rbo_Nro;
                
                $arr=explode("-",$r);
                $puesto=$arr[0];
                $nro=$arr[1]+1;
                $i=5;
                $c=1;
                $ceros='';
                $max= 8 - strlen("$nro"); 
                
                    while($r[$i]==0 and $c<=$max){
                    $ceros= "0$ceros";
                    $i++;
                    $c++;
                    }
                
                $rbo="$puesto-$ceros$nro";
                }
            }
            return $rbo;
    }
    function vale_nro(){
        $pue_ubicacion = $this->session->userdata('puesto');
        if(substr($pue_ubicacion,0,7)=='Central'){
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0001-%')and
                    (PuestosCaja.Pue_Ubicacion LIKE 'Central' + '%')AND
                    (Comprobantes.Tipo_Comprobante=3)";
        }elseif (substr($pue_ubicacion,0,5)=='Anexo') {
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0002-%')and
                    (PuestosCaja.Pue_Ubicacion LIKE 'Anexo' + '%')AND
                    (Comprobantes.Tipo_Comprobante=3)";
        }else{
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0003-%')and
                    (Comprobantes.Tipo_Comprobante=3)";
        }
            $result=$this->db->query($query);
            $res=$result->result();
            foreach ($res as $re){
                if(!$re->Rbo_Nro and substr($pue_ubicacion,0,7)=='Central'){
                    $rbo="0001-00000001";
                }elseif(!$re->Rbo_Nro and substr($pue_ubicacion,0,5)=='Anexo'){
                    $rbo="0002-00000001";
                }elseif(!$re->Rbo_Nro){
                    $rbo="0003-00000001";
                }elseif($re){
                $r=$re->Rbo_Nro;
                
                $arr=explode("-",$r);
                $puesto=$arr[0];
                $nro=$arr[1]+1;
                $i=5;
                $c=1;
                $ceros='';
                $max= 8 - strlen("$nro"); 
                
                    while($r[$i]==0 and $c<=$max){
                    $ceros= "0$ceros";
                    $i++;
                    $c++;
                    }
                
                $vale="$puesto-$ceros$nro";
                }
            }
            return $vale;
    }
    function recibo_cooperadora(){
        $pue_ubicacion = $this->session->userdata('puesto');
        if(substr($pue_ubicacion,0,7)=='Central'){
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0001-%')and
                    (PuestosCaja.Pue_Ubicacion LIKE 'Central' + '%')AND
                    (Comprobantes.Tipo_Comprobante=5)";
        }elseif (substr($pue_ubicacion,0,5)=='Anexo') {
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0002-%')and
                    (PuestosCaja.Pue_Ubicacion LIKE 'Anexo' + '%')AND
                    (Comprobantes.Tipo_Comprobante=5)";
        }else{
            $query="SELECT MAX(Comp_Nro_Externo) AS Rbo_Nro FROM Comprobantes, Cajas, PuestosCaja
                    WHERE 
                    (Comp_Nro_Externo LIKE '0003-%')and
                    (Comprobantes.Tipo_Comprobante=5)";
        }
            $result=$this->db->query($query);
            $res=$result->result();
            foreach ($res as $re){
                if(!$re->Rbo_Nro and substr($pue_ubicacion,0,7)=='Central'){
                    $rbo="0001-00000001";
                }elseif(!$re->Rbo_Nro and substr($pue_ubicacion,0,5)=='Anexo'){
                    $rbo="0002-00000001";
                }elseif(!$re->Rbo_Nro){
                    $rbo="0003-00000001";
                }elseif($re){
                $r=$re->Rbo_Nro;
                
                $arr=explode("-",$r);
                $puesto=$arr[0];
                $nro=$arr[1]+1;
                $i=5;
                $c=1;
                $ceros='';
                $max= 8 - strlen("$nro"); 
                
                    while($r[$i]==0 and $c<=$max){
                    $ceros= "0$ceros";
                    $i++;
                    $c++;
                    }
                
                $rbo="$puesto-$ceros$nro";
                }
            }
            return $rbo;
    }
    function numerotexto ($numero) { 
    // Primero tomamos el número y le quitamos los caracteres especiales y extras 
    // Dejando solamente el punto "." que separa los decimales 
    // Si encuentra más de un punto, devuelve error. 
    // NOTA: Para los paises en que el punto y la coma se usan de forma 
    // inversa, sólo hay que cambiar la coma por punto en el array de "extras" 
    // y el punto por coma en el explode de $partes 
 
    $extras= array("/[\$]/","/ /","/,/","/-/"); 
    $limpio=preg_replace($extras,"",$numero); 
    $partes=explode(".",$limpio); 
    if (count($partes)>2) { 
        return "Error, el n&uacute;mero no es correcto"; 
        exit(); 
    } 
 
    // Ahora explotamos la parte del numero en elementos de un array que 
    // llamaremos $digitos, y contamos los grupos de tres dígitos 
    // resultantes 
 
    $digitos_piezas=chunk_split ($partes[0],1,"#"); 
    $digitos_piezas=substr($digitos_piezas,0,strlen($digitos_piezas)-1); 
    $digitos=explode("#",$digitos_piezas); 
    $todos=count($digitos); 
    $grupos=ceil (count($digitos)/3); 
 
    // comenzamos a dar formato a cada grupo 
 
    $unidad = array   ('un','dos','tres','cuatro','cinco','seis','siete','ocho','nueve'); 
    $decenas = array ('diez','once','doce', 'trece','catorce','quince'); 
    $decena = array   ('dieci','veinti','treinta','cuarenta','cincuenta','sesenta','setenta','ochenta','noventa'); 
    $centena = array   ('ciento','doscientos','trescientos','cuatrocientos','quinientos','seiscientos','setecientos','ochocientos','novecientos'); 
    $resto=$todos; 
 
    for ($i=1; $i<=$grupos; $i++) { 
 
        // Hacemos el grupo 
        if ($resto>=3) { 
            $corte=3; } else { 
            $corte=$resto; 
        } 
            $offset=(($i*3)-3)+$corte; 
            $offset=$offset*(-1); 
 
        // la siguiente sección es una adaptación de la contribución de cofyman y JavierB 
 
        $num=implode("",array_slice ($digitos,$offset,$corte)); 
        $resultado[$i] = ""; 
        $cen = (int) ($num / 100);              //Cifra de las centenas 
        $doble = $num - ($cen*100);             //Cifras de las decenas y unidades 
        $dec = (int)($num / 10) - ($cen*10);    //Cifra de las decenas 
        $uni = $num - ($dec*10) - ($cen*100);   //Cifra de las unidades 
        if ($cen > 0) { 
           if ($num == 100) $resultado[$i] = "cien"; 
           else $resultado[$i] = $centena[$cen-1].' '; 
        }//end if 
        if ($doble>0) { 
           if ($doble == 20) { 
              $resultado[$i] .= " veinte"; 
           }elseif (($doble < 16) and ($doble>9)) { 
              $resultado[$i] .= $decenas[$doble-10]; 
           }else { 
              $resultado[$i] .=' '. $decena[$dec-1]; 
           }//end if 
           if ($dec>2 and $uni<>0) $resultado[$i] .=' y '; 
           if (($uni>0) and ($doble>15) or ($dec==0)) { 
              if ($i==1 && $uni == 1) $resultado[$i].="uno"; 
              elseif ($i==2 && $num == 1) $resultado[$i].=""; 
              else $resultado[$i].=$unidad[$uni-1]; 
           } 
        } 
 
        // Le agregamos la terminación del grupo 
        switch ($i) { 
            case 2: 
            $resultado[$i].= ($resultado[$i]=="") ? "" : " mil "; 
            break; 
            case 3: 
            $resultado[$i].= ($num==1) ? " mill&oacute;n " : " millones "; 
            break; 
        } 
        $resto-=$corte; 
    } 
 
    // Sacamos el resultado (primero invertimos el array) 
    $resultado_inv= array_reverse($resultado, TRUE); 
    $final=""; 
    foreach ($resultado_inv as $parte){ 
        $final.=$parte; 
    }
    $resultado=null;
    // para la parte decimal, desdpués del punto
    $arr=explode(".",$numero);
    $decimal=$arr[1];
    $digitos_piezas=chunk_split ($decimal,1,"#"); 
    $digitos_piezas=substr($digitos_piezas,0,strlen($digitos_piezas)-1); 
    $digitos=explode("#",$digitos_piezas); 
    $todos=count($digitos); 
    $grupos=ceil (count($digitos)/3); 
 
    // comenzamos a dar formato a cada grupo 
 
    $unidad = array   ('un','dos','tres','cuatro','cinco','seis','siete','ocho','nueve'); 
    $decenas = array ('diez','once','doce', 'trece','catorce','quince'); 
    $decena = array   ('dieci','veinti','treinta','cuarenta','cincuenta','sesenta','setenta','ochenta','noventa'); 
    $centena = array   ('ciento','doscientos','trescientos','cuatrocientos','quinientos','seiscientos','setecientos','ochocientos','novecientos'); 
    $resto=$todos; 
 
    for ($i=1; $i<=$grupos; $i++) { 
 
        // Hacemos el grupo 
        if ($resto>=3) { 
            $corte=3; } else { 
            $corte=$resto; 
        } 
            $offset=(($i*3)-3)+$corte; 
            $offset=$offset*(-1); 
 
        // la siguiente sección es una adaptación de la contribución de cofyman y JavierB 
 
        $num=implode("",array_slice ($digitos,$offset,$corte)); 
        $resultado[$i] = ""; 
        $cen = (int) ($num / 100);              //Cifra de las centenas 
        $doble = $num - ($cen*100);             //Cifras de las decenas y unidades 
        $dec = (int)($num / 10) - ($cen*10);    //Cifra de las decenas 
        $uni = $num - ($dec*10) - ($cen*100);   //Cifra de las unidades 
        if ($cen > 0) { 
           if ($num == 100) $resultado[$i] = "cien"; 
           else $resultado[$i] = $centena[$cen-1].' '; 
        }//end if 
        if ($doble>0) { 
           if ($doble == 20) { 
              $resultado[$i] .= " veinte"; 
           }elseif (($doble < 16) and ($doble>9)) { 
              $resultado[$i] .= $decenas[$doble-10]; 
           }else { 
              $resultado[$i] .=' '. $decena[$dec-1]; 
           }//end if 
           if ($dec>2 and $uni<>0) $resultado[$i] .=' y '; 
           if (($uni>0) and ($doble>15) or ($dec==0)) { 
              if ($i==1 && $uni == 1) $resultado[$i].="uno"; 
              elseif ($i==2 && $num == 1) $resultado[$i].=""; 
              else $resultado[$i].=$unidad[$uni-1]; 
           } 
        } 
 
        $resto-=$corte; 
    } 
 
    // Sacamos el resultado (primero invertimos el array) 
    $resultado_inv= array_reverse($resultado, TRUE);
    
    $decimales='';
    $ceros=0;
    foreach ($resultado_inv as $parte){ 
        
        if($parte==''){
        $ceros++;}
        $decimales.=$parte; 
    }
    
    if($ceros==1){
        $decimales=' cero';
    }
    return "$final con$decimales centavos"; 
} 
    
}

?>
